# [
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3,  1]
# [1, 4, 6,  4, 1]
# [1, 5, 10, 5, 1]
# ]

# 列表的列表

# row col
# row == col 1
# col == 0   1
#
# T[3][1] = T[2][0] + T[2][1]
# T[3][2] = T[2][1] + T[2][2]
#
# YangHuiTriangle[row][col] = T[row - 1][col - 1] + T[row - 1][col]
def generate_yanghui_triangle(level):
  t = [[1]]

  for row in range(1, level):
    tmp = []
    for col in range(0, row + 1):
      if col == 0 or row == col:
        tmp.append(1)
      else:
        tmp.append(t[row - 1][col - 1] + t[row - 1][col])
      
    t.append(tmp)

  return t

print(generate_yanghui_triangle(3))

'''
两个数字之间放一个空格
   1    ---------> 4 个位置，前导 3 个空格
  1 1   ---------> 3 个位置，前导 2 个空格
 1 2 1  ---------> 2 个位置，前导 1 个空格
1 3 3 1 ---------> 1 个位置，前导 0 个空格

1. t 中最后一个列表有多少个元素，这个值决定了第一行打印在哪
2. 依次打印 t 中的每一个列表
'''

def print_yanghui_triangle(level):
  t = generate_yanghui_triangle(level)
  n = len(t)
  spaces = len(t[n - 1]) - 1;

  for i in range(0, n):
    print(" " * spaces, end = '')
    # t[i] 的元素个数 i + 1
    for j in range(0, i + 1):
      # String interpolation
      print(f"{t[i][j]} ", end = '')
    spaces -= 1
    print("\n", end='')

print_yanghui_triangle(4)

'''
   1 ---------> 3 spaces = 杨辉三角最后一行的元素个数 - 1
  1 1
 1 2 1
1 3 3 1

    1 ---------> 4 spaces
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1

'''